/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Control;

import java.io.IOException;
import java.util.Hashtable;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
 * @author 0445100
 */
public class MainAccessServlet extends HttpServlet {
    private Hashtable commands;
    /** 
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException{
        response.setContentType("text/html;charset=UTF-8");
        String cmd = request.getParameter("cmd");
        if(cmd == null){
            throw new ServletException();
        }
        String actionClass = (String) commands.get(cmd);
        if(actionClass == null){
            throw new ServletException();
        }
        try {
            //Cria a instância da classe utilizando introspecção
            Class classe = Class.forName(actionClass);
            Processor action = (Processor) classe.newInstance();
            action.setRequest(request);
            action.setResponse(response);
            action.execute();
        }catch(Exception e){
            response.sendRedirect("paginaErro.jsp");
        }
    
    }
    
    

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /** 
     * Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Returns a short description of the servlet.
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
    
    @Override
    public void init(ServletConfig config) throws ServletException {
        super.init(config);
        commands = new Hashtable();
        commands.put("loginProcessor", "Control.loginProcessor");
        commands.put("logoutProcessor", "Control.logoutProcessor");
        commands.put("cadastraUsuario", "Control.cadastraUsuario");
        commands.put("bloquearUsuario", "Control.bloquearUsuario");
        commands.put("editarUsuario", "Control.editarUsuario");
        commands.put("removerUsuario", "Control.removerUsuario");
        commands.put("mudarPermissao", "Control.mudarPermissao");
        commands.put("cadastraRecurso", "Control.cadastraRecurso");
        commands.put("atualizarRecurso", "Control.atualizarRecurso");
        commands.put("removerRecurso", "Control.removerRecurso");
        commands.put("cadastrarEspaco", "Control.cadastraEspaco");
        commands.put("atualizarEspaco", "Control.atualizarEspaco");
        commands.put("removerEspaco", "Control.removerEspaco");
        commands.put("pesquisarUsuario", "Control.pesquisarUsuario");
        commands.put("pesquisarRecurso", "Control.pesquisarRecurso");
        commands.put("pesquisarEspaco", "Control.pesquisarEspaco");
        commands.put("preparaCadastroEspaco", "Control.preparaCadastroEspaco");
        commands.put("preparaPesquisarEspaco", "Control.preparaPesquisarEspaco");
        commands.put("validaCadastro", "Control.validaCadastro");
        commands.put("validaRecurso", "Control.validaRecurso");
        commands.put("validaEspaco", "Control.validaEspaco");
        
    }
}